package com.yang.webhook.modules.dao;

import java.util.List;

/**
 * @author 杨成 E-mail:yangcheng@wiswit.com
 * @version 创建时间：2017年3月3日 下午4:11:00 类说明 ：Dao通用接口
 */

public interface CommonDao {

	/**
	 * 只有第一次访问数据库，后面再查询相同的时候直接访问缓存
	 */
	Object load(String id, Object entity);

	/**
	 * 用一次就访问一次数据库
	 */
	Object get(String id, Object entity);

	/**
	 * 查询所有记录
	 */
	List<Object> findAll(Object entity);

	/**
	 * persist如果在transaction之外调用，不会导致insert语句的立即执行，而是在flush时执行insert语句。
	 * persist如果在transaction之内调用，会导致insert语句的立即执行 ，适用于被扩展的Session上下文的长期运行的会话中
	 */
	void persist(Object entity);

	/**
	 * 集合了save和update方法，为了提高效率，尽量不用
	 */
	boolean saveOrUpdate(Object entity);

	/**
	 * 作用就是将session的缓存中的数据与数据库同步
	 */
	void flush();
	
	/**
	 * 
	*YC 
	*2017年7月6日 下午5:15:05
	* <p>Title: save</p> 
	* <p>Description: </p> 
	* @param object
	* @return
	 */

	public boolean save(Object object);

	/**
	 * 
	*YC 
	*2017年7月6日 下午5:15:21
	* <p>Title: delete</p> 
	* <p>Description: </p> 
	* @param object
	* @return
	 */
	public boolean delete(Object object);

	/**
	 * 
	*YC 
	*2017年7月6日 下午5:15:27
	* <p>Title: update</p> 
	* <p>Description: </p> 
	* @param object
	* @return
	 */
	public boolean update(Object object);
/**
 * 
*YC 
*2017年7月6日 下午5:15:32
* <p>Title: query</p> 
* <p>Description: </p> 
* @param id
* @param object
* @return
 */
	public Object query(String id, Object object);

	/**
	*YC 
	*2017年7月6日 下午5:16:31
	* <p>Title: query</p> 
	* <p>Description: </p> 
	* @param object
	* @param key
	* @param value
	* @return 
	*/
	public List<Object> query(Object object, Object[] key, Object[] value);

	/**
	*YC 
	*2017年7月6日 下午5:16:56
	* <p>Title: query</p> 
	* <p>Description: </p> 
	* @param object
	* @return 
	*/
	public List<Object> query(Object object);

	/**
	*YC 
	*2017年7月6日 下午5:17:00
	* <p>Title: queryOrderDesc</p> 
	* <p>Description: </p> 
	* @param object
	* @param keys
	* @param maxResults
	* @return 
	*/
	public List<Object> queryOrderDesc(Object object, String keys, int maxResults);

	/**
	*YC 
	*2017年7月6日 下午5:17:11
	* <p>Title: queryOrderAsc</p> 
	* <p>Description: </p> 
	* @param object
	* @param keys
	* @param maxResults
	* @return 
	*/
	public List<Object> queryOrderAsc(Object object, String keys, int maxResults);

	/**
	*YC 
	*2017年7月6日 下午5:17:14
	* <p>Title: queryLastRecordId</p> 
	* <p>Description: </p> 
	* @param object
	* @return 
	*/
	public Object queryLastRecordId(Object object);

	/**
	*YC 
	*2017年7月6日 下午5:17:22
	* <p>Title: query</p> 
	* <p>Description: </p> 
	* @param object
	* @param curPage
	* @param max
	* @param keys
	* @param values
	* @return 
	*/
	public List<Object> query(Object object, int curPage, int max, String keys, String values);

	/**
	*YC 
	*2017年7月6日 下午5:17:27
	* <p>Title: query</p> 
	* <p>Description: </p> 
	* @param object
	* @param curPage
	* @param max
	* @param key
	* @param value
	* @return 
	*/
	public List<Object> query(Object object, int curPage, int max, Object[] key, Object[] value);

	/**
	*YC 
	*2017年7月6日 下午5:17:33
	* <p>Title: queryRecordNum</p> 
	* <p>Description: </p> 
	* @param object
	* @param keys
	* @param values
	* @return 
	*/
	public double queryRecordNum(Object object, String keys, Object values);
	/**
	*刘超 
	*2017年7月6日 下午5:17:33
	* <p>Title: hql查询</p> 
	* <p>Description: </p> 
	* @param hql
	* @return List
	*/
	public List<Object> queryByHql(String hql);
	
	public List<Object> orgQueryPerson(Object object, int curPage, int max,String orgId);
	public List<Object> orgQueryPersonTeam(Object object,String userid,String orgId);

}